﻿//using NuGet.Packaging;
using PanhuaWin.工厂.仓库.下线;
using Sunny.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PanhuaWin.仓库.下线
{
    public partial class Form临时大标签打印 : UIPage
    {
        public string 工厂编号1;
        private DataTable dt = new DataTable();
        //select* from Bus_StockInVolume;
        //select* from Bus_Volume;
        //select* from Bus_LablePrint;
        public Form临时大标签打印()
        {
            InitializeComponent();
        }

        private void Form大标签打印_Initialize(object sender, EventArgs e)
        {

        }

        private void Form大标签打印_Load(object sender, EventArgs e)
        {
            this.uiDatePicker生产日期.Value = DateTime.Now;
            //pub.ListWorkShop(pub.sys_user, uiComboBoxWorkshop);
            列出未打印的临时小标签();

            uiComboBox包装.Items.Add("精包");
            uiComboBox包装.Items.Add("简包");
            uiComboBox包装.Items.Add("普包");
            uiComboBox包装.Items.Add("裸包");
            uiComboBox包装.Items.Add("无");
        }
        private void uiButton查询_Click(object sender, EventArgs e)
        {
            列出未打印的临时小标签();
        }

        private void 列出未打印的临时小标签()
        {
            string sql = @"select guid, 来源种类, 来源产线, 来源班组, 工厂编号, 生产批号, 存货编号, 品名, 钢号, 条码, 厚度, 产地, 长度, 规格, 
                            等级, 表面状态, 表面处理, 净重, 备注, 生产日期, 检验员, 操作ip, 操作人员, 操作时间, 仓库, 货位, 锌层,包装形式
                            from Bus_LablePrint
                            where 来源种类 like '临时%'
                            and 生产批号 not in (select VolumeCodeNew from Bus_StockInVolume)";
            if (!string.IsNullOrEmpty(uiTextBox查询卷号.Text))
            {
                sql += "and 生产批号 = '" + uiTextBox查询卷号.Text + "'";
            }
            if (!string.IsNullOrEmpty(uiTextBox查询表面状态.Text))
            {
                sql += "and 表面状态 = '" + uiTextBox查询表面状态.Text + "'";
            }

            if (!string.IsNullOrEmpty(uiTextBox查询规格.Text))
            {
                sql += "and 规格 = '" + uiTextBox查询规格.Text + "'";
            }
            if (!string.IsNullOrEmpty(uiTextBox查询长度.Text))
            {
                sql += "and 长度 = '" + uiTextBox查询长度.Text + "'";
            }

            if (!string.IsNullOrEmpty(uiComboBox查询钢号.Text))
            {
                sql += "and 钢号 = '" + uiComboBox查询钢号.Text + "'";
            }
            dt = pub.GetDataTable(pub.ConnectionString, sql);
            uiDataGridView待打印小标签.DataSource = dt;
            uiDataGridView待打印小标签.Refresh();
        }

        private void uiComboBoxWorkshop_SelectedIndexChanged(object sender, EventArgs e)
        {
            pub.ListWorkType(this.uiComboBoxWorkshop.SelectedValue.ToString(), uiComboBox加工类别);
            pub.ListRank(this.uiComboBoxWorkshop.SelectedValue.ToString(), uiComboBox等级);
            string sql;
            工厂编号1 = this.uiComboBoxWorkshop.SelectedValue.ToString();
            sql = @"SELECT   guid, WorkShopCode, WorkShopName, AuditDate, AuditStatus, AuditId, Auditor, Remark, CreateID, Creator, 
                CreateDate, ModifyID, Modifier, ModifyDate   FROM      Dic_WorkShop     where  WorkShopCode='" + 工厂编号1 + "'      ";
            DataTable tb = pub.GetDataTable(pub.ConnectionString, sql);
            if (tb.Rows.Count > 0)
            {
                //                sql = @"SELECT    guid, WorkShopGuid, WarehouseCode, WarehouseName, WarehouseDesc, AuditDate, AuditStatus, AuditId, 
                //                Auditor, Remark, CreateID, Creator, CreateDate, ModifyID, Modifier, ModifyDate
                //FROM      Dic_Warehouse where WorkShopGuid ='" + tb.Rows[0]["guid"].ToString() + "'";
                //                DataTable tb2 = pub.GetDataTable(pub.ConnectionString, sql);
                pub.ListWareHouse(this.uiComboBox仓库编号1, tb.Rows[0]["guid"].ToString());
                

            }

        }

        private void uiComboBox加工类别_SelectedIndexChanged(object sender, EventArgs e)
        {
            pub.List产品钢号(this.uiComboBoxWorkshop.SelectedValue.ToString(), uiComboBox加工类别.SelectedValue.ToString(), uiComboBox钢号);
        }

        private void uiButton打印_Click(object sender, EventArgs e)
        {
            //输入条码可以搜索 打印到NC


            string sql;
            //验证一下信息


            //如果有打印了，是要覆盖重新打印，还是不打印

            string 生产批号 = this.uiTextBox卷号.Text.Trim().Replace("--", "-");

            sql = @"SELECT  guid, 来源种类, 来源产线, 来源班组, 工厂编号, 生产批号, 存货编号, 品名, 钢号, 条码, 厚度, 产地, 长度, 规格, 
                   等级, 表面状态, 表面处理, 净重, 备注, 生产日期, 检验员, 操作ip, 操作人员, 操作时间, 仓库, 货位, 锌层,包装形式";
            sql += " from  Bus_LablePrint where 生产批号='" + 生产批号 + "'";
            DataTable dt = pub.GetDataTable(pub.ConnectionString, sql);

            if (dt != null && dt.Rows.Count > 0)
            {
                string 存货编号 = dt.Rows[0]["存货编号"].ToString();
                if (string.IsNullOrEmpty(存货编号))
                {
                    MessageBox.Show("存货编号不能为空，请输入");
                    return;
                }
                string 工厂编号 = dt.Rows[0]["工厂编号"].ToString();
                //string 生产批号 = dt.Rows[e.RowIndex]["生产批号"].ToString();
                string 品名 = dt.Rows[0]["品名"].ToString();
                string 钢号 = dt.Rows[0]["钢号"].ToString();
                string 厚度 = dt.Rows[0]["厚度"].ToString();
                string 长度 = dt.Rows[0]["长度"].ToString();
                string 规格 = dt.Rows[0]["规格"].ToString();
                string 等级 = dt.Rows[0]["等级"].ToString();
                string 表面状态 = dt.Rows[0]["表面状态"].ToString();
                string 表面处理 = dt.Rows[0]["表面处理"].ToString();
                string 来源种类 = dt.Rows[0]["来源种类"].ToString();
                string 净重 = dt.Rows[0]["净重"].ToString();
                string 备注 = dt.Rows[0]["备注"].ToString();
                string 生产日期 = dt.Rows[0]["生产日期"].ToString();
                string departCode = queryDeptCode("Bus_PicklingOutput", 生产批号);
                string 仓库 = dt.Rows[0]["仓库"].ToString();
                string 锌层 = dt.Rows[0]["锌层"].ToString();
                string 包装形式 = dt.Rows[0]["包装形式"].ToString();
                //string 产地 = dt.Rows[e.RowIndex]["产地"].ToString();
                //产地暂时用万达
                string 产地 = "万达";
                //塞入 Bus_Volume
                int res = insertIntoBus_Volume(工厂编号, 生产批号, 存货编号, departCode, 品名, 钢号, 长度, 厚度, 规格, 等级, 表面状态, 表面处理, 净重, 备注, 生产日期, 产地, 仓库, 锌层, 包装形式);
                //生成入库单 检查这个批号有没有生成过
                string sqlqueryIsInstock = @"select * from Bus_StockInV
                                                left join Bus_StockInVolume on Bus_StockInV.guid = Bus_StockInVolume.guid
                                                where VolumeCodeNew =  '" + 生产批号 + "'";
                DataTable dtIsInstock = pub.GetDataTable(pub.ConnectionString, sqlqueryIsInstock);
                if (dtIsInstock != null && dtIsInstock.Rows.Count > 0)
                {
                    int r = print(来源种类, 工厂编号, 生产批号, 品名, 钢号, 长度, 规格, 等级, 表面状态, 表面处理, 净重, 备注, 生产日期);
                    if (dtIsInstock.Rows[0]["IsSendToNC"].ToString() == "N")
                    {
                        pub.sendToNC产成品(dtIsInstock.Rows[0]["DocCode"].ToString());
                    }
                }
                else
                {
                    string docCode = createBus_StockInV(工厂编号, 生产批号, 存货编号, departCode, 品名, 钢号, 长度, 厚度, 规格, 等级, 表面状态, 表面处理, 净重, 备注, 生产日期, 产地, 仓库,锌层, 包装形式);
                    pub.sendToNC产成品(docCode);
                }
            }
            else
            {
                MessageBox.Show("未查到【" + 生产批号 + "】,请重新选择要打印的标签");
            }
        }

        private string createBus_StockInV(string 工厂编号, string 生产批号, string 存货编号, string departCode, string 品名, string 钢号, string 长度, string 厚度, 
            string 规格, string 等级, string 表面状态, string 表面处理, string 净重, string 备注, string 生产日期, string 产地, string 仓库,
            string 锌层, string 包装形式)
        {
            string guid = Guid.NewGuid().ToString();
            string Bguid = Guid.NewGuid().ToString();
            string docCode = pub.GetDocCode("产品入库", 工厂编号);
            decimal.TryParse(厚度, out decimal a);
            string sql;
            sql = " insert into Bus_StockInV(guid, StockInType, WorkShopCode, DocCode,  DepartCode, CreateID, Creator, CreateDate,IsSendToNC)";
            sql += " values('" + guid + "','产品入库 ','" + 工厂编号 + "','" + docCode + "', '" + departCode + "','" + pub.sys_user.User_Id + "','" + pub.sys_user.UserTrueName + "', getdate(),'N')";

            sql += @" insert into Bus_StockInVolume
                        (guid,Bguid, DocCode, RowNumber, WorkShopCode, WarehouseCode,[WarehouseCode], StorageLocation, VolumeCodeNew, InventoryCode, Size, 
                        Thick,  Material,CID,Virtual,FaceStatus,FaceDone, Weight, Address,ProductDate,Grade,Meter,[ZinCeng],PackageType) values ('" +
                        guid + "','" + Bguid + "', '" + docCode + "', '1', '" + 工厂编号 + "','"+仓库+"', 'F', '', '" + 生产批号 + "', '" + 存货编号 + "', '" + 规格 + "', '"
                        + a + "',  '" + 钢号 + "','','C','" + 表面状态 + "',' " + 表面处理 + "','" + 净重 + "', '" + 产地 + "','" + 生产日期 + "','" + 等级 + "','" + 长度 + "','"+锌层+"','"+ 包装形式 + "')";
            int r = pub.ExecuteSql(pub.ConnectionString, sql, "保存成品入库单据");
            string sqlqueryHeader = "select * from Bus_StockInV where guid='" + guid + "' ";
            DataTable tbr = pub.GetDataTable(pub.ConnectionString, sqlqueryHeader);
            if (tbr.Rows.Count > 0)
            {
                string sqlqueryBody = "select * from Bus_StockInVolume where guid='" + guid + "'";
                DataTable tbb = pub.GetDataTable(pub.ConnectionString, sqlqueryBody);
                if (tbb.Rows.Count > 0)
                {
                    MessageBox.Show("保存成功单号【" + docCode + "】!", "提示", MessageBoxButtons.OK);

                    return docCode;
                }
                else
                {
                    sql = "delete  Bus_StockInV  where guid='" + guid + "'";
                    pub.ExecuteSql(pub.ConnectionString, sql, "因为保存失败了，删除原料入库单");
                    MessageBox.Show("保存失败,代码【err1】!", "提示", MessageBoxButtons.OK);
                    return docCode;
                }
            }
            else
            {
                sql = "delete  Bus_StockInVolume  where guid='" + guid + "'";

                pub.ExecuteSql(pub.ConnectionString, sql, "因为保存失败了，删除原料入库单");
                MessageBox.Show("保存失败,代码【err2】!", "提示", MessageBoxButtons.OK);
                return docCode;
            }

        }


        private int print(string 来源种类, string 工厂编号, string 生产批号, string 品名, string 钢号, string 长度, string 规格, string 等级, string 表面状态, string 表面处理, string 净重, string 备注, string 生产日期)
        {
            //string 生产批号 = dt.Rows[index]["生产批号"].ToString();
            //string 品名 = dt.Rows[index]["品名"].ToString();
            //string 钢号 = dt.Rows[index]["钢号"].ToString();
            //string 长度 = dt.Rows[index]["长度"].ToString();
            //string 规格 = dt.Rows[index]["规格"].ToString();
            //string 等级 = dt.Rows[index]["等级"].ToString();
            //string 表面状态 = dt.Rows[index]["表面状态"].ToString();
            //string 表面处理 = dt.Rows[index]["表面处理"].ToString();
            //string 净重 = dt.Rows[index]["净重"].ToString();
            //string 备注 = dt.Rows[index]["备注"].ToString();
            //string 生产日期 = dt.Rows[index]["生产日期"].ToString();

            BarTender.Application ba = new BarTender.Application();
            BarTender.Format bfmt;
            //bfmt = ba.Formats.Open(System.Windows.Forms.Application.StartupPath + "\\攀华大标签.btw");
            //bfmt.SetNamedSubStringValue("生产批号", dt.Rows[index]["生产批号"].ToString());
            //bfmt.SetNamedSubStringValue("品名", dt.Rows[index]["品名"].ToString());
            //bfmt.SetNamedSubStringValue("钢号", dt.Rows[index]["钢号"].ToString());
            //bfmt.SetNamedSubStringValue("长度", dt.Rows[index]["长度"].ToString());
            //bfmt.SetNamedSubStringValue("规格", dt.Rows[index]["规格"].ToString());
            //bfmt.SetNamedSubStringValue("等级", dt.Rows[index]["等级"].ToString());
            //bfmt.SetNamedSubStringValue("表面状态", dt.Rows[index]["表面状态"].ToString());
            //bfmt.SetNamedSubStringValue("表面处理", dt.Rows[index]["表面处理"].ToString());
            //bfmt.SetNamedSubStringValue("净重", dt.Rows[index]["净重"].ToString());
            //bfmt.SetNamedSubStringValue("备注", dt.Rows[index]["备注"].ToString());
            //bfmt.SetNamedSubStringValue("生产日期", dt.Rows[index]["生产日期"].ToString());
            bfmt = ba.Formats.Open(System.Windows.Forms.Application.StartupPath + "\\攀华大标签.btw");
            bfmt.SetNamedSubStringValue("生产批号", 生产批号);
            bfmt.SetNamedSubStringValue("品名", 品名);
            bfmt.SetNamedSubStringValue("钢号", 钢号);
            bfmt.SetNamedSubStringValue("长度", 长度);
            bfmt.SetNamedSubStringValue("规格", 规格);
            bfmt.SetNamedSubStringValue("等级", 等级);
            bfmt.SetNamedSubStringValue("表面状态", 表面状态);
            bfmt.SetNamedSubStringValue("表面处理", 表面处理);
            bfmt.SetNamedSubStringValue("净重", 净重);
            bfmt.SetNamedSubStringValue("备注", 备注);
            bfmt.SetNamedSubStringValue("生产日期", 生产日期);
            bfmt.PrintOut();
            string sql = "insert into Bus_LablePrint(guid, 工厂编号, 生产批号,  品名, 钢号, 条码, 长度, 规格, 等级, 表面状态,  ";
            sql += " 表面处理, 净重, 备注, 生产日期,  操作ip, 操作人员, 操作时间 ) ";
            sql += " values(newid(),'" + 工厂编号 + "','" + 生产批号 + "',";
            sql += " '" + 品名 + "','" + 钢号 + "','" + 生产批号 + "','" + 长度 + "','" + 规格 + "','" + 等级 + "','" + 表面状态 + "',";
            sql += " '" + 表面处理 + "','" + 净重 + "','" + 备注 + "','" + 生产日期 + "','" + pub.getMac() + "','" + pub.sys_user.UserTrueName + "',getdate())";
            pub.ExecuteSql(pub.ConnectionString, sql, "临时大标签打印塞入");
            ba.Quit();

            sql = "update  Bus_PicklingOutput set PrintTimes =(select count(1) from Bus_LablePrint where 条码='" + 生产批号 + "' and 来源种类='" + 来源种类 + "')";
            sql += " where OutputVolumeNew='" + 生产批号 + "'";
            pub.ExecuteSql(pub.ConnectionString, sql, "酸洗小标签打印次数更新");
            return 1;
        }

        private int insertIntoBus_Volume(string 工厂编号, string 生产批号, string 存货编号, string departCode, string 品名, string 钢号, string 长度, string 厚度, string 规格, string 等级, string 表面状态, string 表面处理, string 净重, 
            string 备注, string 生产日期, string 产地, string 仓库, string 锌层, string 包装形式)
        {
            //先检查有没有
            string sqlquery = @"select * from Bus_Volume where VolumeCodeNew = '" + 生产批号 + "'";
            DataTable dt = pub.GetDataTable(pub.ConnectionString, sqlquery);
            if (dt != null && dt.Rows.Count > 0)
            {
                return 0;
            }
            else
            {
                string sql = @"insert into Bus_Volume ( guid,[WorkShopCode],[VolumeCodeNew],[FinishSize] ,[InventoryCode],[Material],[Address],[IsInStorage],StorageLocation,[WarehouseCode],[ZinCeng],PackageType)";
                sql += "values";
                sql += "( '" + Guid.NewGuid().ToString() + "','" + 工厂编号 + "','" + 生产批号 + "','" + 规格 + "' ,'" + 存货编号 + "','" + 钢号 + "','" + 产地 + "','在库','','"+ 仓库 + "','"+ 锌层 + "','"+ 包装形式 + "')";
                return pub.ExecuteSql(pub.ConnectionString, sql, "保存成品入库状态单据");
            }
        }

        private string queryDeptCode(string tableName, string OutputVolumeNew)
        {
            DataTable dt = new DataTable();
            //string sql = @"select [OutputGuid], [guid], [Row], [VolumeCodeNew], [OutputVolumeNew], [OutputSize], [OutputThick], [OutputWidth], [OutputMaterial], [OutputWeight],
            //                [OutputMeter], [OutputQualityGrade], [OutputQualityInformation], [OutputEndStatus], [OutputNext], [OutputAddress], [PrintTimes], [DepartCode], [DepartName],
            //                [WorkLineCode], [WorkLineName], [WorkTeamCode], [WorkTeamName], [DayShiftCode], [DayShiftName], [CreateID], [Creator], [CreateDate], [ModifyID], [Modifier],
            //                [ModifyDate] where OutputVolumeNew = '" + OutputVolumeNew + "'";
            string sql = @"select   [DepartCode], [DepartName]
                            from " + tableName + " where OutputVolumeNew = '" + OutputVolumeNew + "'";
            dt = pub.GetDataTable(pub.ConnectionString, sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                return dt.Rows[0]["DepartCode"].ToString();
            }
            else
            {
                return "";

            }

        }

        private void uiButton清空_Click(object sender, EventArgs e)
        {
            this.uiTextBox净重.Text = "";
            this.uiTextBox品名.Text = "";
            this.uiTextBox备注.Text = "";
            this.uiTextBox卷号.Text = "";
            this.uiTextBox表面处理.Text = "";
            this.uiTextBox表面状态.Text = "";
            this.uiTextBox规格.Text = "";
            this.uiTextBox长度.Text = "";



        }


        private void uiDataGridView待打印小标签_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                string guid = dt.Rows[e.RowIndex]["guid"].ToString();
                string 来源种类 = dt.Rows[e.RowIndex]["来源种类"].ToString();
                string 工厂编号 = dt.Rows[e.RowIndex]["工厂编号"].ToString();
                string 生产批号 = dt.Rows[e.RowIndex]["生产批号"].ToString();
                string 品名 = dt.Rows[e.RowIndex]["品名"].ToString();
                string 钢号 = dt.Rows[e.RowIndex]["钢号"].ToString();
                string 条码 = dt.Rows[e.RowIndex]["条码"].ToString();
                string 长度 = dt.Rows[e.RowIndex]["长度"].ToString();
                string 规格 = dt.Rows[e.RowIndex]["规格"].ToString();
                string 等级 = dt.Rows[e.RowIndex]["等级"].ToString();
                string 表面状态 = dt.Rows[e.RowIndex]["表面状态"].ToString();
                string 表面处理 = dt.Rows[e.RowIndex]["表面处理"].ToString();
                string 净重 = dt.Rows[e.RowIndex]["净重"].ToString();
                string 备注 = dt.Rows[e.RowIndex]["备注"].ToString();
                string 生产日期 = dt.Rows[e.RowIndex]["生产日期"].ToString();
                string 操作ip = dt.Rows[e.RowIndex]["操作ip"].ToString();
                string 操作人员 = dt.Rows[e.RowIndex]["操作人员"].ToString();
                string 操作时间 = dt.Rows[e.RowIndex]["操作时间"].ToString();
                string 仓库 = dt.Rows[e.RowIndex]["仓库"].ToString();
                string 锌层 = dt.Rows[e.RowIndex]["锌层"].ToString();
                string 包装形式 = dt.Rows[e.RowIndex]["包装形式"].ToString();
                uiTextBoxguid.Text = guid;
                uiComboBoxWorkshop.Text = 工厂编号;
                uiTextBox卷号.Text = 生产批号;
                uiTextBox规格.Text = 规格;
                uiTextBox表面状态.Text = 表面状态;
                uiTextBox净重.Text = 净重;
                DateTime.TryParse(生产日期, out DateTime date);
                uiDatePicker生产日期.Value = date;
                //uiComboBox加工类别.Text = 
                uiTextBox品名.Text = 品名;
                uiComboBox钢号.Text = 钢号;
                uiTextBox长度.Text = 长度;
                uiComboBox等级.Text = 等级;
                uiTextBox表面处理.Text = 表面处理;
                uiTextBox备注.Text = 备注;
                uiTextBox锌层.Text = 锌层;
                uiComboBox仓库编号1.Text = 仓库;
                uiComboBox包装.Text = 包装形式;
            }
        }

        private void uiButton更新_Click(object sender, EventArgs e)
        {
            string sqlupdate = @"update Bus_LablePrint set 工厂编号 = '" + uiComboBoxWorkshop.Text + "', 规格 = '" + uiTextBox规格.Text
                                + "', 表面状态 = '" + uiTextBox表面状态.Text + "', 净重 = '" + uiTextBox净重.Text +
                                "', 生产日期 = '" + uiDatePicker生产日期.Value.ToString("yyyy-MM-dd") + "',品名 = '" + uiTextBox品名.Text +
                                "',钢号 = '" + uiComboBox钢号.Text + "',长度 = '" + uiTextBox长度.Text + "',等级 = '" + uiComboBox等级.Text +
                                "',表面处理 = '" + uiTextBox表面处理.Text + "',备注 = '" + uiTextBox备注.Text +
                                "',仓库 = '"+ uiComboBox仓库编号1.SelectedValue?.ToString()+ "',锌层 = '"+ uiTextBox锌层.Text +
                                "',包装形式 = '"+ uiComboBox包装.Text+ "' where guid = '" + uiTextBoxguid.Text + "'";

            pub.ExecuteSql(pub.ConnectionString, sqlupdate, "更新临时小标签");
            列出未打印的临时小标签();
        }

        private void uiButton1_Click(object sender, EventArgs e)
        {
            Form补录存货编码 form补录存货编码 = new Form补录存货编码();
            if (form补录存货编码.ShowDialog(this) == DialogResult.OK)
            {
                if (!string.IsNullOrEmpty(form补录存货编码.存货编号))
                {
                    string 存货号 = form补录存货编码.存货编号;
                    uiTextBox存货编号.Text = 存货号;
                }
            }
        }
    }
}
